/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.utilitarios;

import br.com.foxinline.modelo.Usuario;
import br.com.foxinline.util.Msg;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.faces.context.FacesContext;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletContext;

/**
 * @author laverson
 */
public class EmailUtilitario {

    public static final String emailNaoResponda = "naoresponda@foxinline.com";
    public static final String senha = "foxinline2014";
    public static final String sistema = "Tabularium";
    public static final String urlSistema = "http://projetos.foxinline.com:8080/Tabularium-war/";

    public static String primeiroAcesso(Usuario user) {

        String nomeUsuario = user.getNome().toUpperCase();
        String login = user.getLogin();
        String urlAcesso = urlSistema.concat("primeiroacesso.xhtml?create_password_token=" + user.getToken());

        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
        String dataCadastro = format.format(new Date());

        String msg = "Caro(a) " + nomeUsuario + "<br/>"
                + "O seu cadastro para acesso ao sistema " + sistema + " foi efetuado com sucesso em " + dataCadastro + ".<br/>"
                + "O sistema poderá ser acessado em <a href=\"" + urlSistema + "\">" + sistema + "</a><br/><br/>"
                + "• Login do sistema: " + login + "<br/><br/>"
                + "Crie sua senha acessando o link abaixo: <br/>"
                + "<a href=\"" + urlAcesso + "\">" + urlAcesso + "</a><br/><br/>"
                //                + "Se você desejar alterar seus dados, utilize a opção \"Alterar meus dados\" na tela de identificação.<br/>"
                + "Observação: Atente para a diferença entre caracteres minúsculos e maiúsculos do login e senha!<br/>";

        return msg;
    }

    public void enviarEmail(String email, String mensagem, String remetente) {

        Properties props = enviarOutlook();

        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {

                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(emailNaoResponda, senha);
                    }
                });

        /**
         * Ativa Debug para sessão
         */
        session.setDebug(true);

        try {

            String content = createContent(mensagem);

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(emailNaoResponda)); //Remetente

            Address[] toUser = InternetAddress //Destinatário(s)
                    .parse(email);

            message.setRecipients(Message.RecipientType.TO, toUser);
            message.setSubject("Notificação " + sistema);//Assunto
            message.setContent(content, "text/html; charset=utf-8");
            message.setSentDate(new Date());
            /**
             * Método para enviar a mensagem criada
             */
            Transport.send(message);
            Msg.messagemInfo("Mensagem Enviada com Sucesso");

        } catch (AddressException ae) {
            ae.printStackTrace();
            Msg.messagemError("Email '" + email + "' não existe ou não foi informado corretamente !");
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }

    }

    private Properties enviarGmail() {
        Properties props = new Properties();
        /**
         * Parâmetros de conexão com servidor Gmail
         */
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");

        return props;
    }

    private Properties enviarOutlook() {
        Properties props = new Properties();
        /**
         * Parâmetros de conexão com servidor Hotmail
         */
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", "smtp.live.com");
        props.put("mail.smtp.socketFactory.port", "587");
        props.put("mail.smtp.socketFactory.fallback", "false");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "587");

        return props;
    }

    private String createContent(String mensagem) {

        FacesContext facesContext = FacesContext.getCurrentInstance();
        ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext();
        String pathImage = servletContext.getContextPath();//getRealPath("/media/images/logo-fox-small.jpg");
        
        System.err.println(pathImage);

        String content = mensagem + "<br/>" + "Mensagem notificada pelo sistema " + sistema + "<br/><br/>"
                //                    + "Eviado por: " + remetente + "<br/><br/>"
                + "Por favor não responda este e-mail.";

        String footer = "<br/><br/>"
                + "<img src=\"" + pathImage + "\">® FoxInline Technologies";

        return content.concat(footer);

    }
}
